function MVVM(options) {
    this.$options = options || {};
    var data = this._data = this.$options.data;
    var me = this;

    Object.keys(data).forEach(function (key) {
        me._proxyData(key);
    });

    observe(data);

    new Watcher(me, 'person', function (value, oldVal) {
        // console.log("Watcher : ", oldVal, "---->", value);
    })

    new Watcher(me, 'person.name', function (value, oldVal) {
        // console.log("Watcher : ", oldVal, "---->", value);
    })

    console.log("")
}

MVVM.prototype = {
    _proxyData: function (key) {
        var me = this;

        Object.defineProperty(me, key, {
            configurable: false,
            enumerable: true,
            get: function () {
                return me._data[key];
            },
            set: function (newVal) {
                me._data[key] = newVal;
            }
        });
    }
}